package 炫彩元素类

import (
	xc "gitee.com/go_888/xcgui/xcgui/xc"
	xcc "gitee.com/go_888/xcgui/xcgui/xcc"
)

// 代码编辑框.
type X结构_代码编辑框 struct {
	X结构_编辑框
}

// 代码编辑框_创建.
//
// x: 元素x坐标.
//
// y: 元素y坐标.
//
// cx: 宽度.
//
// cy: 高度.
//
// hParent: 父为窗口句柄或元素句柄.
func X创建代码编辑框(元素x坐标, 元素y坐标, 宽度, 高度 int32, 父窗口句柄 int) *X结构_代码编辑框 {
	p := &X结构_代码编辑框{}
	p.X设置句柄(xc.X代码编辑框_创建(元素x坐标, 元素y坐标, 宽度, 高度, 父窗口句柄))
	return p
}

// 从句柄创建对象.
func X创建代码编辑框并按句柄(句柄 int) *X结构_代码编辑框 {
	p := &X结构_代码编辑框{}
	p.X设置句柄(句柄)
	return p
}

// 从name创建对象, 失败返回nil.
func X创建代码编辑框并按名称(名称 string) *X结构_代码编辑框 {
	handle := xc.X取对象并按名称(名称)
	if handle > 0 {
		p := &X结构_代码编辑框{}
		p.X设置句柄(handle)
		return p
	}
	return nil
}

// 从UID创建对象, 失败返回nil.
func X创建代码编辑框并按UID(UID int32) *X结构_代码编辑框 {
	handle := xc.X取对象并按UID(UID)
	if handle > 0 {
		p := &X结构_代码编辑框{}
		p.X设置句柄(handle)
		return p
	}
	return nil
}

// 从UID名称创建对象, 失败返回nil.
func X创建代码编辑框并按UID名称(名称 string) *X结构_代码编辑框 {
	handle := xc.X取对象并按UID名称(名称)
	if handle > 0 {
		p := &X结构_代码编辑框{}
		p.X设置句柄(handle)
		return p
	}
	return nil
}

/*// 代码编辑框_启用空格选择自动匹配项.
//
// bEnable: 是否启用.
func (e *Editor) EnableAutoMatchSpaseSelect(bEnable bool) int {
	return xc.XEditor_EnableAutoMatchSpaseSelect(e.Handle, bEnable)
}*/

// 代码编辑框_判断断点.
//
// iRow: 行索引.
func (e *X结构_代码编辑框) X判断断点(行索引 int32) bool {
	return xc.X代码编辑框_是否断点(e.X句柄, 行索引)
}

// 代码编辑框_置断点.
//
// iRow: 行索引.
//
// bActivate: 是否激活.
func (e *X结构_代码编辑框) X设置断点(行索引 int32, 是否激活 bool) bool {
	return xc.X代码编辑框_设置断点(e.X句柄, 行索引, 是否激活)
}

// 代码编辑框_移除断点.
//
// iRow: 行索引.
func (e *X结构_代码编辑框) X移除断点(行索引 int32) bool {
	return xc.X代码编辑框_移除断点(e.X句柄, 行索引)
}

// 代码编辑框_清空断点.
func (e *X结构_代码编辑框) X清空断点() *X结构_代码编辑框 {
	xc.X代码编辑框_清空断点(e.X句柄)
	return e
}

// 代码编辑框_置当前运行.
//
// iRow: 行索引.
func (e *X结构_代码编辑框) X设置当前运行(行索引 int32) bool {
	return xc.X代码编辑框_设置当前运行(e.X句柄, 行索引)
}

// 代码编辑框_取颜色信息.
//
// pInfo: 颜色信息结构体指针.
func (e *X结构_代码编辑框) X取颜色信息(返回颜色 *xc.X结构_代码编辑框_颜色信息) *X结构_代码编辑框 {
	xc.X代码编辑框_取颜色信息(e.X句柄, 返回颜色)
	return e
}

// 代码编辑框_置颜色.
//
// pInfo: 颜色信息结构体指针.
func (e *X结构_代码编辑框) X设置颜色(颜色指针 *xc.X结构_代码编辑框_颜色信息) *X结构_代码编辑框 {
	xc.X代码编辑框_设置颜色(e.X句柄, 颜色指针)
	return e
}

/*// 代码编辑框_置常量样式.
//
// iStyle: 样式.
func (e *Editor) SetStyleKeyword(iStyle int) int {
	return xc.XEditor_SetStyleKeyword(e.Handle, iStyle)
}*/

/*// 代码编辑框_置函数样式.
//
// iStyle: 样式.
func (e *Editor) SetStyleFunction(iStyle int) int {
	return xc.XEditor_SetStyleFunction(e.Handle, iStyle)
}*/

/*// 代码编辑框_置变量样式.
//
// iStyle: 样式.
func (e *Editor) SetStyleVar(iStyle int) int {
	return xc.XEditor_SetStyleVar(e.Handle, iStyle)
}*/

/*// 代码编辑框_置数据类型样式.
//
// iStyle: 样式.
func (e *Editor) SetStyleDataType(iStyle int) int {
	return xc.XEditor_SetStyleDataType(e.Handle, iStyle)
}*/

/*// 代码编辑框_置类样式.
//
// iStyle: 样式.
func (e *Editor) SetStyleClass(iStyle int) int {
	return xc.XEditor_SetStyleClass(e.Handle, iStyle)
}*/

/*// 代码编辑框_置宏样式.
//
// iStyle: 样式.
func (e *Editor) SetStyleMacro(iStyle int) int {
	return xc.XEditor_SetStyleMacro(e.Handle, iStyle)
}*/

/*// 代码编辑框_置字符串样式.
//
// iStyle: 样式.
func (e *Editor) SetStyleString(iStyle int) int {
	return xc.XEditor_SetStyleString(e.Handle, iStyle)
}*/

/*// 代码编辑框_置注释样式.
//
// iStyle: 样式.
func (e *Editor) SetStyleComment(iStyle int) int {
	return xc.XEditor_SetStyleComment(e.Handle, iStyle)
}*/

/*// 代码编辑框_置数字样式.
//
// iStyle: 样式.
func (e *Editor) SetStyleNumber(iStyle int) int {
	return xc.XEditor_SetStyleNumber(e.Handle, iStyle)
}*/

// 代码编辑框_取断点数量.
func (e *X结构_代码编辑框) X取断点数量() int32 {
	return xc.X代码编辑框_取断点数量(e.X句柄)
}

// 代码编辑框_取全部断点, 返回实际获取断点数量.
//
// aPoints: 接收断点数组.
//
// nCount: 数组大小.
func (e *X结构_代码编辑框) X取全部断点(返回断点数组 *[]int32, 返回长度 int32) int32 {
	return xc.X代码编辑框_取全部断点(e.X句柄, 返回断点数组, 返回长度)
}

// 代码编辑框_设置当前行, 跳过收缩行.
//
// iRow: 行索引.
func (e *X结构_代码编辑框) X设置当前行(行索引 int32) *X结构_代码编辑框 {
	xc.X代码编辑框_设置当前行(e.X句柄, 行索引)
	return e
}

// 代码编辑框_获取深度.
//
// iRow: 行索引.
func (e *X结构_代码编辑框) X获取深度(行索引 int32) int32 {
	return xc.X代码编辑框_获取深度(e.X句柄, 行索引)
}

// 代码编辑框_转换到展开行, 跳过收缩行.
//
// iRow: 行索引.
func (e *X结构_代码编辑框) X转换到展开行(行索引 int32) int32 {
	return xc.X代码编辑框_转换到展开行(e.X句柄, 行索引)
}

// 代码编辑框_展开扩展, 完全展开指定行, 例如:行包含在折叠内容中, 将其展开.
//
// iRow: 行索引.
func (e *X结构_代码编辑框) X展开EX(行索引 int32) *X结构_代码编辑框 {
	xc.X代码编辑框_展开EX(e.X句柄, 行索引)
	return e
}

// 代码编辑框_展开全部.
//
// bExpand: 是否展开.
func (e *X结构_代码编辑框) X展开全部(是否展开 bool) *X结构_代码编辑框 {
	xc.X代码编辑框_展开全部(e.X句柄, 是否展开)
	return e
}

// 代码编辑框_展开指定行.
//
// iRow: 行索引.
//
// bExpand: 是否展开.
func (e *X结构_代码编辑框) X展开指定行(行索引 int32, 是否展开 bool) *X结构_代码编辑框 {
	xc.X代码编辑框_展开指定行(e.X句柄, 行索引, 是否展开)
	return e
}

// 代码编辑框_添加关键字.
//
// pKey: 字符串.
//
// iStyle: 样式.
func (e *X结构_代码编辑框) X添加关键字(文本 string, 样式 int32) *X结构_代码编辑框 {
	xc.X代码编辑框_添加关键字(e.X句柄, 文本, 样式)
	return e
}

// 代码编辑框_添加自动匹配字符串.
//
// pKey: 字符串.
func (e *X结构_代码编辑框) X添加自动匹配文本(文本 string) *X结构_代码编辑框 {
	xc.X代码编辑框_添加自动匹配文本(e.X句柄, 文本)
	return e
}

// 代码编辑框_添加自动匹配函数.
//
// pKey: 字符串.
func (e *X结构_代码编辑框) X添加自动匹配函数(文本 string) *X结构_代码编辑框 {
	xc.X代码编辑框_添加自动匹配函数(e.X句柄, 文本)
	return e
}

// 代码编辑框_添加排除定义变量关键字, 排除定义变量的关键字, 用于排除定义变量, 因为定义变量禁用自动匹配; 此关键字不加入自动匹配,仅用于排除定义变量.
//
// pKeyword: 字符串.
func (e *X结构_代码编辑框) X添加排除定义变量关键字(文本 string) *X结构_代码编辑框 {
	xc.X代码编辑框_添加排除定义变量关键字(e.X句柄, 文本)
	return e
}

// 代码编辑框_获取折叠状态.
func (e *X结构_代码编辑框) X获取折叠状态() string {
	return xc.X代码编辑框_获取折叠状态(e.X句柄)
}

// 代码编辑框_设置折叠状态.
//
// pString: .
func (e *X结构_代码编辑框) X设置折叠状态(pString string) bool {
	return xc.X代码编辑框_设置折叠状态(e.X句柄, pString)
}

// 代码编辑框_获取缩进.
//
// iRow: 行.
func (e *X结构_代码编辑框) X获取缩进(行 int32) int32 {
	return xc.X代码编辑框_获取缩进(e.X句柄, 行)
}

// 代码编辑框_是否为空行.
//
// iRow: 行.
func (e *X结构_代码编辑框) X是否为空行(行 int32) bool {
	return xc.X代码编辑框_是否为空行(e.X句柄, 行)
}

// 代码编辑框_置自动匹配结果显示模式.
//
// mode: 0:中英文, 1:英文, 3:中文.
func (e *X结构_代码编辑框) X设置自动匹配结果显示模式(模式 int32) *X结构_代码编辑框 {
	xc.X代码编辑框_设置自动匹配结果显示模式(e.X句柄, 模式)
	return e
}

// ------------------------- 事件 ------------------------- //

type X事件_代码编辑框_多行内容改变 func(iRow int32, nRows int32, pbHandled *bool) int                 // 多行内容改变事件 例如:区块注释操作, 区块缩进操作, 代码格式化. iRow: 开始行. nRows: 改变行数量.
type X事件_代码编辑框_多行内容改变1 func(hEle int, iRow int32, nRows int32, pbHandled *bool) int      // 多行内容改变事件 例如:区块注释操作, 区块缩进操作, 代码格式化. iRow: 开始行. nRows: 改变行数量.
type X事件_代码编辑框_设置断点 func(iRow int32, bCheck bool, pbHandled *bool) int               // 代码编辑框_设置断点.
type X事件_代码编辑框_设置断点1 func(hEle int, iRow int32, bCheck bool, pbHandled *bool) int    // 代码编辑框_设置断点.
type X事件_代码编辑框_移除断点 func(iRow int32, pbHandled *bool) int                         // 代码编辑框_移除断点.
type X事件_代码编辑框_移除断点1 func(hEle int, iRow int32, pbHandled *bool) int              // 代码编辑框_移除断点.
type X事件_代码编辑框_自动匹配选择 func(iRow int32, nRows int32, pbHandled *bool) int            // 代码编辑框_自动匹配选择.
type X事件_代码编辑框_自动匹配选择1 func(hEle int, iRow int32, nRows int32, pbHandled *bool) int // 代码编辑框_自动匹配选择.

// 多行内容改变事件 例如:区块注释操作, 区块缩进操作, 代码格式化.
func (e *X结构_代码编辑框) X事件_多行内容改变(回调函数 X事件_代码编辑框_多行内容改变) bool {
	return xc.X元素_注册事件C(e.X句柄, xcc.X元素事件_代码编辑框_多行内容改变, 回调函数)
}

// 多行内容改变事件 例如:区块注释操作, 区块缩进操作, 代码格式化.
func (e *X结构_代码编辑框) X事件_多行内容改变1(回调函数 X事件_代码编辑框_多行内容改变1) bool {
	return xc.X元素_注册事件C1(e.X句柄, xcc.X元素事件_代码编辑框_多行内容改变, 回调函数)
}

// 代码编辑框_设置断点.
func (e *X结构_代码编辑框) X事件_设置断点(回调函数 X事件_代码编辑框_设置断点) bool {
	return xc.X元素_注册事件C(e.X句柄, xcc.X元素事件_代码编辑框_设置断点, 回调函数)
}

// 代码编辑框_设置断点.
func (e *X结构_代码编辑框) X事件_设置断点1(回调函数 X事件_代码编辑框_设置断点1) bool {
	return xc.X元素_注册事件C1(e.X句柄, xcc.X元素事件_代码编辑框_设置断点, 回调函数)
}

// 代码编辑框_移除断点.
func (e *X结构_代码编辑框) X事件_移除断点(回调函数 X事件_代码编辑框_移除断点) bool {
	return xc.X元素_注册事件C(e.X句柄, xcc.X元素事件_代码编辑框_移除断点, 回调函数)
}

// 代码编辑框_移除断点.
func (e *X结构_代码编辑框) X事件_移除断点1(回调函数 X事件_代码编辑框_移除断点1) bool {
	return xc.X元素_注册事件C1(e.X句柄, xcc.X元素事件_代码编辑框_移除断点, 回调函数)
}

// 代码编辑框_自动匹配选择.
func (e *X结构_代码编辑框) X事件_自动匹配选择(回调函数 X事件_代码编辑框_自动匹配选择) bool {
	return xc.X元素_注册事件C(e.X句柄, xcc.X元素事件_代码编辑框_自动匹配选择, 回调函数)
}

// 代码编辑框_自动匹配选择.
func (e *X结构_代码编辑框) X事件_自动匹配选择1(回调函数 X事件_代码编辑框_自动匹配选择1) bool {
	return xc.X元素_注册事件C1(e.X句柄, xcc.X元素事件_代码编辑框_自动匹配选择, 回调函数)
}

// ------------------------- AddEvent ------------------------- //

// AddEvent_Editor_Modify_Rows 添加多行内容改变事件. 例如:区块注释操作, 区块缩进操作, 代码格式化. iRow: 开始行. nRows: 改变行数量.
//
// pFun: 回调函数.
//
// allowAddingMultiple: 允许添加多个回调函数.
func (e *X结构_代码编辑框) AddEvent_Editor_Modify_Rows(pFun X事件_代码编辑框_多行内容改变1, allowAddingMultiple ...bool) int {
	return EventHandler.AddCallBack(e.X句柄, xcc.X元素事件_代码编辑框_多行内容改变, onXE_EDITOR_MODIFY_ROWS, pFun, allowAddingMultiple...)
}

// onXE_EDITOR_MODIFY_ROWS 多行内容改变事件. 例如:区块注释操作, 区块缩进操作, 代码格式化. iRow: 开始行. nRows: 改变行数量.
func onXE_EDITOR_MODIFY_ROWS(hEle int, iRow int32, nRows int32, pbHandled *bool) int {
	cbs := EventHandler.GetCallBacks(hEle, xcc.X元素事件_代码编辑框_多行内容改变)
	var ret int
	for i := len(cbs) - 1; i >= 0; i-- {
		if cbs[i] != nil {
			ret = cbs[i].(X事件_代码编辑框_多行内容改变1)(hEle, iRow, nRows, pbHandled)
			if *pbHandled {
				break
			}
		}
	}
	return ret
}

// AddEvent_Editor_SetBreakPoint 添加代码编辑框设置断点事件.
//
// pFun: 回调函数.
//
// allowAddingMultiple: 允许添加多个回调函数.
func (e *X结构_代码编辑框) AddEvent_Editor_SetBreakPoint(pFun X事件_代码编辑框_设置断点1, allowAddingMultiple ...bool) int {
	return EventHandler.AddCallBack(e.X句柄, xcc.X元素事件_代码编辑框_设置断点, onXE_EDITOR_SETBREAKPOINT, pFun, allowAddingMultiple...)
}

// onXE_EDITOR_SETBREAKPOINT 代码编辑框设置断点事件.
func onXE_EDITOR_SETBREAKPOINT(hEle int, iRow int32, bCheck bool, pbHandled *bool) int {
	cbs := EventHandler.GetCallBacks(hEle, xcc.X元素事件_代码编辑框_设置断点)
	var ret int
	for i := len(cbs) - 1; i >= 0; i-- {
		if cbs[i] != nil {
			ret = cbs[i].(X事件_代码编辑框_设置断点1)(hEle, iRow, bCheck, pbHandled)
			if *pbHandled {
				break
			}
		}
	}
	return ret
}

// AddEvent_Editor_RemoveBreakPoint 添加代码编辑框移除断点事件.
//
// pFun: 回调函数.
//
// allowAddingMultiple: 允许添加多个回调函数.
func (e *X结构_代码编辑框) AddEvent_Editor_RemoveBreakPoint(pFun X事件_代码编辑框_移除断点1, allowAddingMultiple ...bool) int {
	return EventHandler.AddCallBack(e.X句柄, xcc.X元素事件_代码编辑框_移除断点, onXE_EDITOR_REMOVEBREAKPOINT, pFun, allowAddingMultiple...)
}

// onXE_EDITOR_REMOVEBREAKPOINT 代码编辑框移除断点事件.
func onXE_EDITOR_REMOVEBREAKPOINT(hEle int, iRow int32, pbHandled *bool) int {
	cbs := EventHandler.GetCallBacks(hEle, xcc.X元素事件_代码编辑框_移除断点)
	var ret int
	for i := len(cbs) - 1; i >= 0; i-- {
		if cbs[i] != nil {
			ret = cbs[i].(X事件_代码编辑框_移除断点1)(hEle, iRow, pbHandled)
			if *pbHandled {
				break
			}
		}
	}
	return ret
}

// AddEvent_Editor_AutoMatch_Select 添加代码编辑框自动匹配选择事件.
//
// pFun: 回调函数.
//
// allowAddingMultiple: 允许添加多个回调函数.
func (e *X结构_代码编辑框) AddEvent_Editor_AutoMatch_Select(pFun X事件_代码编辑框_自动匹配选择1, allowAddingMultiple ...bool) int {
	return EventHandler.AddCallBack(e.X句柄, xcc.X元素事件_代码编辑框_自动匹配选择, onXE_EDITOR_AUTOMATCH_SELECT, pFun, allowAddingMultiple...)
}

// onXE_EDITOR_AUTOMATCH_SELECT 代码编辑框自动匹配选择事件.
func onXE_EDITOR_AUTOMATCH_SELECT(hEle int, iRow int32, nRows int32, pbHandled *bool) int {
	cbs := EventHandler.GetCallBacks(hEle, xcc.X元素事件_代码编辑框_自动匹配选择)
	var ret int
	for i := len(cbs) - 1; i >= 0; i-- {
		if cbs[i] != nil {
			ret = cbs[i].(X事件_代码编辑框_自动匹配选择1)(hEle, iRow, nRows, pbHandled)
			if *pbHandled {
				break
			}
		}
	}
	return ret
}
